#ifndef COMPUESTO_H_
#define COMPUESTO_H_

#include <stdlib.h>
#include "componentes/ComponenteAlmacenamiento.h"
#include "../exceptions/MemoryStorageException.h"
#include "../exceptions/NullPointerException.h"
#include "../exceptions/CompuestoException.h"

class Compuesto{
	
	private:
		ComponenteAlmacenamiento **componentes;
		int cantidadComponentes;
		
	public:
		Compuesto();
		
		/**
		 * Agrega un componente
		 * 
		 * @author emilio 
		 * @param ComponenteAlmacenamiento *componente
		 * @throws CompuestoException		 * 
		 * 
		 */
		virtual void addComponente(ComponenteAlmacenamiento *componente);
		
		/**
		 * Elimina un componente
		 *
	     * @author emilio
	     * @param ComponenteAlmacenamiento* componente
	     *
	     */
        virtual void deleteComponentAt(int index);
		
		
		/**
		 * 
		 * @author emilio
		 * @param int index
		 * @return ComponenteAlmacenamiento* componente
		 * @throws CompuestoException
		 * 
		 */
		ComponenteAlmacenamiento* getComponenteAt(int index);
		
		/**
		 * 
		 * @author emilio
		 * @return int cantidad
		 * 
		 */
		int getCantidadComponentes();
		
		virtual ~Compuesto();
};

#endif /*COMPUESTO_H_*/
